package com.bluefox.hospital.repository;

import com.bluefox.hospital.model.RichText;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;


/**
 * RichTextRepository
 *
 * @author Administrator
 */
public interface RichTextRepository extends JpaRepository<RichText, Long> {
    /**
     * 根据新闻类型查询数据
     *
     * @param type
     * @param pageable
     * @return
     */
    Page<RichText> findByType(String type, Pageable pageable);

    /**
     * 根据类型和创建查询信息
     *
     * @param type
     * @param username
     * @param pageable
     * @return
     */
    Page<RichText> findByTypeAndCreatedBy(String type, String username, Pageable pageable);

    /**
     * 根据创建时间获取前9条已发布的新闻数据
     *
     * @param type
     * @param status
     * @return
     */
    List<RichText> findTop9ByTypeAndStatusOrderByOrderFieldDescCreatedDateDesc(String type, Integer status);

    /**
     * 根基发布状态，和类型获取数据
     *
     * @param type
     * @param status
     * @param pageable
     * @return
     */
    Page<RichText> findByTypeAndStatus(String type, Integer status, Pageable pageable);

    /**
     * 根据当前登录用户查询数据
     *
     * @param username
     * @param pageable
     * @return
     */
    Page<RichText> findByCreatedBy(String username, Pageable pageable);

    /**
     * 按照状态分页查询
     *
     * @param status
     * @param pageable
     * @return
     */
    Page<RichText> findByStatus(Integer status, Pageable pageable);

    /**
     * 根据用户名以及类型获取已发布状态的新闻
     *
     * @param type     新闻类型
     * @param username 用户名
     * @param status   1、已经发布 2、未发布的
     * @param pageable 分页查询条件
     * @return
     */
    Page<RichText> findByTypeAndCreatedByAndStatus(String type, String username, Integer status, Pageable pageable);


    /**
     * 根据类型获取当前最大排序值
     * @param type
     * @return
     */
    @Query(value = "select max(order_field) from rich_text t where t.type=?1",nativeQuery = true)
    Integer queryMaxOrderField(String type);
}

